/**
 * 用户信息管理模块
 * 提供全局访问用户信息的方法
 */

// 用户信息缓存
let userInfoCache = null;

/**
 * 获取用户信息
 * 优先从缓存获取，如不存在则从本地存储获取
 */
const getUserInfo = () => {
  // 如果缓存中已有用户信息，直接返回
  if (userInfoCache) {
    return userInfoCache;
  }
  
  // 从本地存储获取用户信息
  try {
    const userInfoStr = uni.getStorageSync('userInfo');
    if (userInfoStr) {
      userInfoCache = JSON.parse(userInfoStr);
      return userInfoCache;
    }
  } catch (e) {
    console.error('获取用户信息失败', e);
  }
  
  return null;
};

/**
 * 设置用户信息
 * 同时更新缓存和本地存储
 */
const setUserInfo = (userInfo) => {
  // 更新缓存
  userInfoCache = userInfo;
  
  // 更新本地存储
  try {
    uni.setStorageSync('userInfo', JSON.stringify(userInfo));
  } catch (e) {
    console.error('保存用户信息失败', e);
  }
};

/**
 * 更新用户信息（合并新数据）
 */
const updateUserInfo = (newInfo) => {
  const currentInfo = getUserInfo() || {};
  const updatedInfo = { ...currentInfo, ...newInfo };
  setUserInfo(updatedInfo);
  return updatedInfo;
};

/**
 * 清除用户信息（退出登录时使用）
 */
const clearUserInfo = () => {
  userInfoCache = null;
  try {
    uni.removeStorageSync('userInfo');
    uni.removeStorageSync('token');
    uni.removeStorageSync('userId');
  } catch (e) {
    console.error('清除用户信息失败', e);
  }
};

/**
 * 获取用户手机号
 */
const getUserPhone = () => {
  const userInfo = getUserInfo();
  return userInfo ? userInfo.phone : '';
};

/**
 * 获取用户ID
 */
const getUserId = () => {
  const userInfo = getUserInfo();
  return userInfo ? userInfo.userId : '';
};

export default {
  getUserInfo,
  setUserInfo,
  updateUserInfo,
  clearUserInfo,
  getUserPhone,
  getUserId
}; 